package com.babysun.core;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;

import com.babysun.commons.dbquery.PageModel;

public interface HibernateDAO<T> {

	/**
	 * 持久化实体
	 * @param entity
	 * @throws RuntimeException
	 */
	public void saveEntity(T entity) throws RuntimeException ;
	
	/**
	 * 持久化实体
	 * @param entity
	 * @return 返回该实体持久化后的唯一标示
	 * @throws RuntimeException
	 */
	public T saveEnity(T entity) throws RuntimeException ;
	
	/**
	 * 根据唯一标示删除一行
	 * @param id 
	 * @throws RuntimeException
	 */
	public void delRow(Serializable id) throws RuntimeException ;
	
	/**
	 * 根据唯一标示删除（多行）
	 * @param ids 数组ID
	 * @throws RuntimeException
	 */
	public void delRows(Class<T> entity,Serializable[] ids) throws RuntimeException ;
	
	/**
	 * 修改实体
	 * @param entity
	 * @throws RuntimeException
	 */
	public void updateEntity(T entity) throws RuntimeException ;
	
	/**
	 * 根据唯一标示获得一个实体记录
	 * @param id
	 * @return
	 * @throws RuntimeException
	 */
	public T getEntity(Class<T> entityClass,Serializable id) throws RuntimeException ;
	
	/**
	 * 根据条件拼装获得一个实体记录
	 * @param queryString 检索SQL
	 * @param whereString 条件SQL
	 * @param param 条件参数
	 * @return 
	 * @throws RuntimeException
	 */
	public T getEntityByParam(String queryString,String whereString,Object[] param) throws RuntimeException ;
	
	/**
	 * 根据唯一标示获得一个实体记录（使用Hibernate延迟加载）
	 * @param id
	 * @return
	 * @throws RuntimeException
	 */
	public T loadEntity(Class<T> entityClass,Serializable id) throws RuntimeException ;
	
	/**
	 * 根据条件拼装获得一个实体记录（使用Hibernate延迟加载）
	 * @param queryString 检索SQL
	 * @param whereString 条件SQL
	 * @param orderby 排序
	 * @param param 条件参数
	 * @return 
	 * @throws RuntimeException
	 */
	public T loadEntityByParam(String queryString,String whereString,LinkedHashMap<String, String> orderby,Object[] param) throws RuntimeException ;
	
	/**
	 * 根据条件拼装获得多个实体记录
	 * @param queryString 检索SQL
	 * @param whereString 条件SQL
	 * @param orderby 排序
	 * @param param 条件参数
	 * @return
	 * @throws RuntimeException
	 */
	public List<T> findEntity(String queryString,String whereString,LinkedHashMap<String, String> orderby,Object[] param) throws RuntimeException ;
	
	/**
	 * 根据条件拼装进行分页查询获得多个实体记录
	 * @param queryString 检索SQL
	 * @param whereString 条件SQL
	 * @param orderby 排序
	 * @param startPage 起始页
	 * @param endPage 每页显示多少条
	 * @param param 条件参数
	 * @return 返回PageModel封装对象
	 * @throws RuntimeException
	 */
	public PageModel getScrollRecord(String queryString,String whereString,LinkedHashMap<String, String> orderby,int startPage,int endPage,Object[] param) throws RuntimeException ;
	
	
}
